/** \file
 \brief Potentials interface.
 */
#ifndef FASTMD_POTENTIAL_INCLUDED
#define FASTMD_POTENTIAL_INCLUDED 

#include "core/types.hpp"
#include "yocto/string.hpp"

namespace FastMD 
{
	
	class Potential : public Object
	{
	public:
		virtual ~Potential() throw();
		
		virtual Real operator()( V3D &f_ij, const V3D &r_ij ) const throw() = 0;
		virtual const char *name() const throw() = 0;
		
		void save( const string &prefix, Real rmin, Real rmax ) const;
		
	protected:
		explicit Potential() throw();
		
	private:
		YOCTO_DISABLE_COPY_AND_ASSIGN(Potential);
	};
	
}

#endif
